In software engineering, a model comprises an abstract description of the software component(s) used by a software system of one or more applications, processes, or other functional units. A model can be defined using a modeling language that typically comprises a consistent set of rules used to interpret the syntax used to express the model. The model can formally define the structure and meaning of data.
For example, a modeled component can comprise a collection of information referred to as a “class” in object-oriented programming, and an “employee” object may comprise a collection of properties (data elements) for a particular instance of an “employee” class. The properties can include, for example, a character parameter “name,” an integer parameter “empID,” and an integer parameter “dob” that is defined in code as:                Class Employee {char *name; int empID; int dob}        
Other programming languages may express the information represented by the “employee” grouping and its properties differently. A data model for the information represented by the “employee” class may be expressed more generally in a modeling language. For example, the model may reflect that on a more abstract level an “employee” component can include an employee's first name, last name, employee number, and date of birth.
Various modeling languages exist that allow for modeling of data and processes of an application. For example, Unified Modeling Language (UML) provides a graphical language for modeling various aspects of a software system. Code generation based on models, such as UML, can allow a skeleton or framework of source code to be produced based on model specifications. For example, the “employee model” may be used to generate the “Employee” class noted above or another logical expression of the employee component.
Although useful in certain situations, existing modeling languages and implementations are not ideal. For example, a given unit of a software system can include data elements (e.g., properties) and functional components (e.g., methods, processes, etc.) that operate on data elements to process input and/or to provide output.
Existing modeling solutions may not be able to fully express the nature of such a software system in an extensible and flexible manner. For instance, even if a model is used to generate a skeleton or framework, developers may still need to tie the framework together manually, such as by adding operations to support user interfaces, evaluation of classes or other parameter groups, and customizing the framework for different situations.